home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Visual Basic Source Code
/
Visual Basic Source Code.iso
/
vbsource
/
powervww
/
options.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1998-01-05
|
47KB
|
1,253 lines
// ____________________________________________________
// | |
// | Project: POWER VIEW IDE |
// | File: OPTIONS.CPP |
// | Compiler: WPP386 (10.6) |
// | |
// | Subject: Options Manager implementation |
// | |
// | Author: Emil Dotchevski |
// |____________________________________________________|
//
// E-mail: zajo@geocities.com
// URL: http://www.geocities.com/SiliconValley/Bay/3577
#define uses_stdio
#define uses_string
#define uses_app
#define uses_check
#define uses_combo
#define uses_editor
#define uses_hist
#define uses_ht
#define uses_icons
#define uses_input
#define uses_stddlg
#define uses_system
#define uses_table
#define uses_txt
#include "PVUSES.H"
#include "W.H"
#include "TLOG.H"
#include "TPROJECT.H"
#include "COMPILE.H"
#define _DECLARE_OPTIONS_H
#include "OPTIONS.H"
#undef _DECLARE_OPTIONS_H
/*
STATIC DATA
*/
static char pvo_signature[] = "\r\nPower View IDE options file.\r\n\032";
#pragma off( unreferenced )
static Tcombo_box *of_target, *of_calls, *of_cpu, *of_debug, *of_optimize;
static void options_fast_handler( Titem *p )
{
of_optimize->set_state( isDISABLED, (compiler_options.debug_options&doOPTIMIZATIONS) && of_debug->cursor() );
of_cpu->set_enable( 0, of_target->cursor()<7 );
of_cpu->set_enable( 1, of_target->cursor()<7 );
of_cpu->set_enable( 2, of_target->cursor()<7 );
of_calls->set_enable( 0, of_target->cursor()>6 );
if( !of_cpu ->enabled(of_cpu ->cursor()) ) of_cpu ->set_data( 5 );
if( !of_calls->enabled(of_calls->cursor()) ) of_calls->set_data( 1 );
}
#pragma on( unreferenced )
void options_fast( void )
{
uint cpu=compiler_options.cpu-1,
calls=compiler_options.calling_conventions-1,
model=compiler_options.memory_model-1,
align=compiler_options.alignment-1,
optimize=(compiler_options.options&opOPTIMIZATIONS)? compiler_options.optimize_for : 0,
debug=(compiler_options.options&opDEBUG_INFO)? compiler_options.debug_level : 0,
fp=compiler_options.fp_instructions-1,
target=linker_options.target_os? linker_options.target_os-1 : 0;
_help( htD_FAST_OPTIONS );
dialog( "Fast compiler/linker options" ); hspacing( 4 );
handler( options_fast_handler );
of_target = combo_box( "|~Target ", target, 35 );
for( uint i=1; i<TO_COUNT; i++ )
of_target->add( target_os[i].title );
push();
_combo_lines( 6 );
of_cpu = combo_box( "C|~PU ", cpu, 7 );
of_cpu->add( "8086" );
of_cpu->add( "80186" );
of_cpu->add( "80286" );
of_cpu->add( "80386" );
of_cpu->add( "80486" );
of_cpu->add( "Pentium" );
_combo_lines( 2 );
of_calls = combo_box( "|~Calls ", calls, 7 );
of_calls->add( "Regs" );
of_calls->add( "Stack" );
_combo_lines( 5 );
Tcombo_box *of_model = combo_box( "|~Model ", model, 7 );
of_model->add( "Small" );
of_model->add( "Medium" );
of_model->add( "Compact" );
of_model->add( "Large" );
of_model->add( "Flat" );
_combo_lines( 4 );
Tcombo_box *of_align = combo_box( "|~Align ", align, 7 );
of_align->add( "Byte" );
of_align->add( "Word" );
of_align->add( "Dword" );
of_align->add( "Qword" );
nc();
_combo_lines( 4 );
of_optimize = combo_box( "|~Optimize", optimize, 10 );
of_optimize->add( "OFF" );
of_optimize->add( "Speed" );
of_optimize->add( "Size" );
of_optimize->add( "Speed/Size" );
_combo_lines( 3 );
of_debug = combo_box( "De|~bug ", debug, 10 );
of_debug->add( "OFF" );
of_debug->add( "Lines" );
of_debug->add( "Full" );
_combo_lines( 3 );
Tcombo_box *of_float = combo_box( "|~FP ", fp, 10 );
of_float->add( "Calls" );
of_float->add( "Emulation" );
of_float->add( "Inline" );
linput( "|~Stack ", linker_options.stack_size, 1024, 0x10000000 );
pop(); hor(); hspacing( 2 );
_history( &compiler_options.defines );
input( "|~Defines", compiler_options.defines, 127, 34 );
nl();
cinput( "|~Warnings level", compiler_options.warn_level, 0, 4 );
hspaces( 4 );
cinput( "|~Errors limit", compiler_options.max_errors, 1, 255 );
nl();
check( "Warnings a|~re errors", compiler_options.debug_options, doWARN_IS_ERR );
check( "Precompiled |~headers", compiler_options.options, opPRECOMPILE );
options_fast_handler( NULL );
if( bkch() )
{
options_changed = 1;
compiler_options.code_size = target>6? cs32BITS : cs16BITS;
linker_options.target_os=++target,
compiler_options.cpu=++cpu,
compiler_options.calling_conventions=++calls,
compiler_options.memory_model=++model,
compiler_options.alignment=++align,
compiler_options.fp_instructions=++fp;
switch( compiler_options.memory_model )
{
case mmSMALL:
case mmMEDIUM:
case mmFLAT_HUGE:
compiler_options.ds_segment = dsPEGGED;
compiler_options.fsgsss_segments = 0;
break;
default:
compiler_options.ds_segment = dsFLOATS;
compiler_options.fsgsss_segments = ssNEQDGROUP;
break;
}
if( !of_optimize->state( isDISABLED ) )
if( optimize )
{
compiler_options.optimize_for=optimize,
compiler_options.options|=opOPTIMIZATIONS,
compiler_options.optimizations|=opLOOP|opREORDER|opCALLRET|opRELAX|opNUMERICALLY|opPENTIUM;
if( optimize==1 )
compiler_options.optimizations|=opINLINE|opINTRINSIC;
else
compiler_options.optimizations&=~(opINLINE|opINTRINSIC|opUSER);
}
else
compiler_options.options&=~opOPTIMIZATIONS;
if( debug )
compiler_options.debug_level=debug,
compiler_options.options|=opDEBUG_INFO;
else
compiler_options.options&=~opDEBUG_INFO;
}
}
/*
COMPILER
*/
static Tradio *r16, *r32, *r086, *r186, *r286, *r386, *calls_stack, *calls_regs, *rm_flat;
static void occg_handler( Titem *p )
{
boolean m16 = ( p == r16 );
boolean m32 = ( p == r32 );
if( !m16 && !m32 ) return;
if( m16 )
{
calls_stack->press();
rm_flat->set_prompt( "|~Huge" );
}
else
{
if( r086->pressed() || r186->pressed() || r286->pressed() ) r386->press();
rm_flat->set_prompt( "|~Flat" );
}
r086->set_state( isDISABLED, m32 );
r186->set_state( isDISABLED, m32 );
r286->set_state( isDISABLED, m32 );
calls_regs->set_state( isDISABLED, m16 );
}
void options_compiler_code_generation( void )
{
_help( htD_CODE_GENERATION );
dialog( "Code generation" ); handler( occg_handler );
hspacing( 1 );
frame( "Memory model" );
radio( "|~Small", compiler_options.memory_model, mmSMALL );
radio( "|~Medium", compiler_options.memory_model, mmMEDIUM );
radio( "|~Compact ", compiler_options.memory_model, mmCOMPACT );
radio( "|~Large", compiler_options.memory_model, mmLARGE );
rm_flat = radio( "|~Flat", compiler_options.memory_model, mmFLAT_HUGE );
endfr();
nc();
frame( "CPU" );
r086 = radio( "8|~086", compiler_options.cpu, cp8086 );
r186 = radio( "80|~186", compiler_options.cpu, cp80186 );
r286 = radio( "80|~286", compiler_options.cpu, cp80286 );
r386 = radio( "80|~386", compiler_options.cpu, cp80386 );
radio( "80|~486", compiler_options.cpu, cp80486 );
radio( "|~Pentium ", compiler_options.cpu, cp80586 );
endfr();
nc();
frame( "Code size" );
r16 = radio( "1|~6 bit ", compiler_options.code_size, cs16BITS );
r32 = radio( "32 b|~it", compiler_options.code_size, cs32BITS );
endfr();
frame( "Calls" );
calls_s